package br.com.qualityempresa.seguranca


class Usuario {

	String nome
	String email
	String senha
	String validarSenha
	String hashSenha
	Date ultimoAcesso
	Boolean ativo = true
	Perfil perfil

	static belongsTo = [perfil: Perfil]
	
	static fetchMode = [perfil: 'eager']
	
	static transients = ['senha', 'validarSenha']
	
	static constraints = {
		nome(blank:true, maxSize: 100)
		email(blank:false, nullable: false, unique:true, email: true, size: 5..50)
		ultimoAcesso(nullable:true, blank: true)
		hashSenha(nullable:true, blank: true)
		senha(blank: false, size: 6..40, password: true, validator: { val, obj ->
			
			if (obj.senha && (
						!obj.senha.matches('^.*\\p{Alpha}.*$') ||
						!obj.senha.matches('^.*\\p{Digit}.*$') ||
						!obj.senha.matches('^.*[!@#&*]+.*$')
					 )
				){					
				return 'usuario.validarSenha.formato'
			}else {
				return true;
			}
		})
		validarSenha(password:true, validator: { val, obj -> 
			if (obj.senha == val)
				return true
			else
				return "usuario.validarSenha.diferentes"
		})
		perfil(lazy: false)
	}
	
	def beforeInsert() {
		if (senha) {
			hashSenha = PasswordCodec.hashEncode(senha)
		}
	}
	
	def beforeUpdate() {
		if (senha) {
			hashSenha = PasswordCodec.hashEncode(senha)
		}
	}
	
	public void atualizarSenha(String senha) {
		this.validarSenha = senha
		this.senha = senha
		this.hashSenha = PasswordCodec.hashEncode(senha.toString())
	}

	@Override
	public String toString() {	
		return nome;
	}
}

